{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "There are 891 samples in train data\n",
      "There are 418 samples in test data\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1309 entries, 0 to 1308\n",
      "Data columns (total 12 columns):\n",
      "Age            1046 non-null float64\n",
      "Cabin          295 non-null object\n",
      "Embarked       1307 non-null object\n",
      "Fare           1308 non-null float64\n",
      "Name           1309 non-null object\n",
      "Parch          1309 non-null int64\n",
      "PassengerId    1309 non-null int64\n",
      "Pclass         1309 non-null int64\n",
      "Sex            1309 non-null object\n",
      "SibSp          1309 non-null int64\n",
      "Survived       891 non-null float64\n",
      "Ticket         1309 non-null object\n",
      "dtypes: float64(3), int64(4), object(5)\n",
      "memory usage: 122.8+ KB\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Voyager\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:17: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
      "of pandas will change to not sort by default.\n",
      "\n",
      "To accept the future behavior, pass 'sort=True'.\n",
      "\n",
      "To retain the current behavior and silence the warning, pass sort=False\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Name</th>\n",
       "      <th>Parch</th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Ticket</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>A/5 21171</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>38.0</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>PC 17599</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>26.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>35.0</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113803</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>373450</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Age Cabin Embarked     Fare  \\\n",
       "0  22.0   NaN        S   7.2500   \n",
       "1  38.0   C85        C  71.2833   \n",
       "2  26.0   NaN        S   7.9250   \n",
       "3  35.0  C123        S  53.1000   \n",
       "4  35.0   NaN        S   8.0500   \n",
       "\n",
       "                                                Name  Parch  PassengerId  \\\n",
       "0                            Braund, Mr. Owen Harris      0            1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...      0            2   \n",
       "2                             Heikkinen, Miss. Laina      0            3   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)      0            4   \n",
       "4                           Allen, Mr. William Henry      0            5   \n",
       "\n",
       "   Pclass     Sex  SibSp  Survived            Ticket  \n",
       "0       3    male      1       0.0         A/5 21171  \n",
       "1       1  female      1       1.0          PC 17599  \n",
       "2       3  female      0       1.0  STON/O2. 3101282  \n",
       "3       1  female      1       1.0            113803  \n",
       "4       3    male      0       0.0            373450  "
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np \n",
    "import pandas as pd \n",
    "\n",
    "# Load train data \n",
    "train_file = 'titanic_train.csv'\n",
    "test_file = 'titanic_test.csv'\n",
    "train_data = pd.read_csv(train_file)\n",
    "print(\"There are {} samples in train data\".format(len(train_data)))\n",
    "\n",
    "# Load test data \n",
    "test_data = pd.read_csv(test_file)\n",
    "print(\"There are {} samples in test data\".format(len(test_data)))\n",
    "\n",
    "# Set the labels of test data as na \n",
    "test_data['Survived'] = np.nan\n",
    "\n",
    "df = pd.concat([train_data, test_data], axis=0, ignore_index=True)\n",
    "df.info()\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Age             263\n",
       "Cabin          1014\n",
       "Embarked          2\n",
       "Fare              1\n",
       "Name              0\n",
       "Parch             0\n",
       "PassengerId       0\n",
       "Pclass            0\n",
       "Sex               0\n",
       "SibSp             0\n",
       "Survived        418\n",
       "Ticket            0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Check how many null values in each feature \n",
    "df.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### For the null values above, we decide to deal as following \n",
    "* The age null values can be filled by regression method \n",
    "* The Emabarked feature can be filled according to the fare and pclass \n",
    "* There are many null values in cabin. For better prediction, it is believed to delete the feature of Cabin. But here we need this feature beacuse when the ship sinks, certain parts of the ship have different probability drown in water. So we deal to make a new feature to subsitute the feature.\n",
    "* The fare can be filled up with median value or mean value \n",
    "* The survived is the target to predict "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Missing values process "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt \n",
    "import seaborn as sns \n",
    "import re \n",
    "%matplotlib inline "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 Embarked"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Name</th>\n",
       "      <th>Parch</th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Ticket</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>38.0</td>\n",
       "      <td>B28</td>\n",
       "      <td>NaN</td>\n",
       "      <td>80.0</td>\n",
       "      <td>Icard, Miss. Amelie</td>\n",
       "      <td>0</td>\n",
       "      <td>62</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113572</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>829</th>\n",
       "      <td>62.0</td>\n",
       "      <td>B28</td>\n",
       "      <td>NaN</td>\n",
       "      <td>80.0</td>\n",
       "      <td>Stone, Mrs. George Nelson (Martha Evelyn)</td>\n",
       "      <td>0</td>\n",
       "      <td>830</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113572</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Age Cabin Embarked  Fare                                       Name  \\\n",
       "61   38.0   B28      NaN  80.0                        Icard, Miss. Amelie   \n",
       "829  62.0   B28      NaN  80.0  Stone, Mrs. George Nelson (Martha Evelyn)   \n",
       "\n",
       "     Parch  PassengerId  Pclass     Sex  SibSp  Survived  Ticket  \n",
       "61       0           62       1  female      0       1.0  113572  \n",
       "829      0          830       1  female      0       1.0  113572  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df['Embarked'].isnull()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Name</th>\n",
       "      <th>Parch</th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Ticket_num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>521171.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>38.0</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>17599.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>26.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>23101282.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>35.0</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113803</td>\n",
       "      <td>113803.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>373450</td>\n",
       "      <td>373450.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Age Cabin Embarked     Fare  \\\n",
       "0  22.0   NaN        S   7.2500   \n",
       "1  38.0   C85        C  71.2833   \n",
       "2  26.0   NaN        S   7.9250   \n",
       "3  35.0  C123        S  53.1000   \n",
       "4  35.0   NaN        S   8.0500   \n",
       "\n",
       "                                                Name  Parch  PassengerId  \\\n",
       "0                            Braund, Mr. Owen Harris      0            1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...      0            2   \n",
       "2                             Heikkinen, Miss. Laina      0            3   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)      0            4   \n",
       "4                           Allen, Mr. William Henry      0            5   \n",
       "\n",
       "   Pclass     Sex  SibSp  Survived            Ticket  Ticket_num  \n",
       "0       3    male      1       0.0         A/5 21171    521171.0  \n",
       "1       1  female      1       1.0          PC 17599     17599.0  \n",
       "2       3  female      0       1.0  STON/O2. 3101282  23101282.0  \n",
       "3       1  female      1       1.0            113803    113803.0  \n",
       "4       3    male      0       0.0            373450    373450.0  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Ticket_num'] = df['Ticket'].map(lambda x: re.sub('\\D', '', x))\n",
    "df['Ticket_num'] = pd.to_numeric(df['Ticket_num'])\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Name</th>\n",
       "      <th>Parch</th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Ticket_num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>38.00</td>\n",
       "      <td>B28</td>\n",
       "      <td>NaN</td>\n",
       "      <td>80.00</td>\n",
       "      <td>Icard, Miss. Amelie</td>\n",
       "      <td>0</td>\n",
       "      <td>62</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113572</td>\n",
       "      <td>113572.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>257</th>\n",
       "      <td>30.00</td>\n",
       "      <td>B77</td>\n",
       "      <td>S</td>\n",
       "      <td>86.50</td>\n",
       "      <td>Cherry, Miss. Gladys</td>\n",
       "      <td>0</td>\n",
       "      <td>258</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>110152</td>\n",
       "      <td>110152.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>2.00</td>\n",
       "      <td>C22 C26</td>\n",
       "      <td>S</td>\n",
       "      <td>151.55</td>\n",
       "      <td>Allison, Miss. Helen Loraine</td>\n",
       "      <td>2</td>\n",
       "      <td>298</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>113781</td>\n",
       "      <td>113781.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>305</th>\n",
       "      <td>0.92</td>\n",
       "      <td>C22 C26</td>\n",
       "      <td>S</td>\n",
       "      <td>151.55</td>\n",
       "      <td>Allison, Master. Hudson Trevor</td>\n",
       "      <td>2</td>\n",
       "      <td>306</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113781</td>\n",
       "      <td>113781.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>377</th>\n",
       "      <td>27.00</td>\n",
       "      <td>C82</td>\n",
       "      <td>C</td>\n",
       "      <td>211.50</td>\n",
       "      <td>Widener, Mr. Harry Elkins</td>\n",
       "      <td>2</td>\n",
       "      <td>378</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>113503</td>\n",
       "      <td>113503.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>390</th>\n",
       "      <td>36.00</td>\n",
       "      <td>B96 B98</td>\n",
       "      <td>S</td>\n",
       "      <td>120.00</td>\n",
       "      <td>Carter, Mr. William Ernest</td>\n",
       "      <td>2</td>\n",
       "      <td>391</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113760</td>\n",
       "      <td>113760.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>435</th>\n",
       "      <td>14.00</td>\n",
       "      <td>B96 B98</td>\n",
       "      <td>S</td>\n",
       "      <td>120.00</td>\n",
       "      <td>Carter, Miss. Lucile Polk</td>\n",
       "      <td>2</td>\n",
       "      <td>436</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113760</td>\n",
       "      <td>113760.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>498</th>\n",
       "      <td>25.00</td>\n",
       "      <td>C22 C26</td>\n",
       "      <td>S</td>\n",
       "      <td>151.55</td>\n",
       "      <td>Allison, Mrs. Hudson J C (Bessie Waldo Daniels)</td>\n",
       "      <td>2</td>\n",
       "      <td>499</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>113781</td>\n",
       "      <td>113781.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>504</th>\n",
       "      <td>16.00</td>\n",
       "      <td>B79</td>\n",
       "      <td>S</td>\n",
       "      <td>86.50</td>\n",
       "      <td>Maioni, Miss. Roberta</td>\n",
       "      <td>0</td>\n",
       "      <td>505</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>110152</td>\n",
       "      <td>110152.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>708</th>\n",
       "      <td>22.00</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>151.55</td>\n",
       "      <td>Cleaver, Miss. Alice</td>\n",
       "      <td>0</td>\n",
       "      <td>709</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113781</td>\n",
       "      <td>113781.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>759</th>\n",
       "      <td>33.00</td>\n",
       "      <td>B77</td>\n",
       "      <td>S</td>\n",
       "      <td>86.50</td>\n",
       "      <td>Rothes, the Countess. of (Lucy Noel Martha Dye...</td>\n",
       "      <td>0</td>\n",
       "      <td>760</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>110152</td>\n",
       "      <td>110152.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>763</th>\n",
       "      <td>36.00</td>\n",
       "      <td>B96 B98</td>\n",
       "      <td>S</td>\n",
       "      <td>120.00</td>\n",
       "      <td>Carter, Mrs. William Ernest (Lucile Polk)</td>\n",
       "      <td>2</td>\n",
       "      <td>764</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113760</td>\n",
       "      <td>113760.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>802</th>\n",
       "      <td>11.00</td>\n",
       "      <td>B96 B98</td>\n",
       "      <td>S</td>\n",
       "      <td>120.00</td>\n",
       "      <td>Carter, Master. William Thornton II</td>\n",
       "      <td>2</td>\n",
       "      <td>803</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113760</td>\n",
       "      <td>113760.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>829</th>\n",
       "      <td>62.00</td>\n",
       "      <td>B28</td>\n",
       "      <td>NaN</td>\n",
       "      <td>80.00</td>\n",
       "      <td>Stone, Mrs. George Nelson (Martha Evelyn)</td>\n",
       "      <td>0</td>\n",
       "      <td>830</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113572</td>\n",
       "      <td>113572.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>965</th>\n",
       "      <td>35.00</td>\n",
       "      <td>C130</td>\n",
       "      <td>C</td>\n",
       "      <td>211.50</td>\n",
       "      <td>Geiger, Miss. Amalie</td>\n",
       "      <td>0</td>\n",
       "      <td>966</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>113503</td>\n",
       "      <td>113503.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>966</th>\n",
       "      <td>32.50</td>\n",
       "      <td>C132</td>\n",
       "      <td>C</td>\n",
       "      <td>211.50</td>\n",
       "      <td>Keeping, Mr. Edwin</td>\n",
       "      <td>0</td>\n",
       "      <td>967</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>113503</td>\n",
       "      <td>113503.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1032</th>\n",
       "      <td>33.00</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>151.55</td>\n",
       "      <td>Daniels, Miss. Sarah</td>\n",
       "      <td>0</td>\n",
       "      <td>1033</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>113781</td>\n",
       "      <td>113781.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1109</th>\n",
       "      <td>50.00</td>\n",
       "      <td>C80</td>\n",
       "      <td>C</td>\n",
       "      <td>211.50</td>\n",
       "      <td>Widener, Mrs. George Dunton (Eleanor Elkins)</td>\n",
       "      <td>1</td>\n",
       "      <td>1110</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>113503</td>\n",
       "      <td>113503.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1197</th>\n",
       "      <td>30.00</td>\n",
       "      <td>C22 C26</td>\n",
       "      <td>S</td>\n",
       "      <td>151.55</td>\n",
       "      <td>Allison, Mr. Hudson Joshua Creighton</td>\n",
       "      <td>2</td>\n",
       "      <td>1198</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>113781</td>\n",
       "      <td>113781.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1298</th>\n",
       "      <td>50.00</td>\n",
       "      <td>C80</td>\n",
       "      <td>C</td>\n",
       "      <td>211.50</td>\n",
       "      <td>Widener, Mr. George Dunton</td>\n",
       "      <td>1</td>\n",
       "      <td>1299</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>113503</td>\n",
       "      <td>113503.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Age    Cabin Embarked    Fare  \\\n",
       "61    38.00      B28      NaN   80.00   \n",
       "257   30.00      B77        S   86.50   \n",
       "297    2.00  C22 C26        S  151.55   \n",
       "305    0.92  C22 C26        S  151.55   \n",
       "377   27.00      C82        C  211.50   \n",
       "390   36.00  B96 B98        S  120.00   \n",
       "435   14.00  B96 B98        S  120.00   \n",
       "498   25.00  C22 C26        S  151.55   \n",
       "504   16.00      B79        S   86.50   \n",
       "708   22.00      NaN        S  151.55   \n",
       "759   33.00      B77        S   86.50   \n",
       "763   36.00  B96 B98        S  120.00   \n",
       "802   11.00  B96 B98        S  120.00   \n",
       "829   62.00      B28      NaN   80.00   \n",
       "965   35.00     C130        C  211.50   \n",
       "966   32.50     C132        C  211.50   \n",
       "1032  33.00      NaN        S  151.55   \n",
       "1109  50.00      C80        C  211.50   \n",
       "1197  30.00  C22 C26        S  151.55   \n",
       "1298  50.00      C80        C  211.50   \n",
       "\n",
       "                                                   Name  Parch  PassengerId  \\\n",
       "61                                  Icard, Miss. Amelie      0           62   \n",
       "257                                Cherry, Miss. Gladys      0          258   \n",
       "297                        Allison, Miss. Helen Loraine      2          298   \n",
       "305                      Allison, Master. Hudson Trevor      2          306   \n",
       "377                           Widener, Mr. Harry Elkins      2          378   \n",
       "390                          Carter, Mr. William Ernest      2          391   \n",
       "435                           Carter, Miss. Lucile Polk      2          436   \n",
       "498     Allison, Mrs. Hudson J C (Bessie Waldo Daniels)      2          499   \n",
       "504                               Maioni, Miss. Roberta      0          505   \n",
       "708                                Cleaver, Miss. Alice      0          709   \n",
       "759   Rothes, the Countess. of (Lucy Noel Martha Dye...      0          760   \n",
       "763           Carter, Mrs. William Ernest (Lucile Polk)      2          764   \n",
       "802                 Carter, Master. William Thornton II      2          803   \n",
       "829           Stone, Mrs. George Nelson (Martha Evelyn)      0          830   \n",
       "965                                Geiger, Miss. Amalie      0          966   \n",
       "966                                  Keeping, Mr. Edwin      0          967   \n",
       "1032                               Daniels, Miss. Sarah      0         1033   \n",
       "1109       Widener, Mrs. George Dunton (Eleanor Elkins)      1         1110   \n",
       "1197               Allison, Mr. Hudson Joshua Creighton      2         1198   \n",
       "1298                         Widener, Mr. George Dunton      1         1299   \n",
       "\n",
       "      Pclass     Sex  SibSp  Survived  Ticket  Ticket_num  \n",
       "61         1  female      0       1.0  113572    113572.0  \n",
       "257        1  female      0       1.0  110152    110152.0  \n",
       "297        1  female      1       0.0  113781    113781.0  \n",
       "305        1    male      1       1.0  113781    113781.0  \n",
       "377        1    male      0       0.0  113503    113503.0  \n",
       "390        1    male      1       1.0  113760    113760.0  \n",
       "435        1  female      1       1.0  113760    113760.0  \n",
       "498        1  female      1       0.0  113781    113781.0  \n",
       "504        1  female      0       1.0  110152    110152.0  \n",
       "708        1  female      0       1.0  113781    113781.0  \n",
       "759        1  female      0       1.0  110152    110152.0  \n",
       "763        1  female      1       1.0  113760    113760.0  \n",
       "802        1    male      1       1.0  113760    113760.0  \n",
       "829        1  female      0       1.0  113572    113572.0  \n",
       "965        1  female      0       NaN  113503    113503.0  \n",
       "966        1    male      0       NaN  113503    113503.0  \n",
       "1032       1  female      0       NaN  113781    113781.0  \n",
       "1109       1  female      1       NaN  113503    113503.0  \n",
       "1197       1    male      1       NaN  113781    113781.0  \n",
       "1298       1    male      1       NaN  113503    113503.0  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[(df['Ticket_num']<114000) & (df['Ticket_num'] > 110000) & (df['Fare']>=80)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['Embarked'].fillna('S', inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 Age\n",
    "The age feature has 263 null values. So we use random forest regression model to simulate the value. The features we use here are sex, title, pclass "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.FacetGrid at 0x1ca264227f0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 483.875x216 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "g = sns.FacetGrid(df[:890], hue='Survived', aspect=2)\n",
    "g.map(sns.kdeplot, 'Age', shade=True)\n",
    "g.set(xlim=(0, df.loc[0:890, 'Age'].max()))\n",
    "g.add_legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestRegressor \n",
    "\n",
    "age_df = df[['Age', 'Pclass', 'Sex', 'Parch', 'SibSp']]\n",
    "age_df = pd.get_dummies(age_df)\n",
    "know_age = age_df[age_df.Age.notnull()]\n",
    "unknow_age = age_df[age_df.Age.isnull()]\n",
    "y = know_age.iloc[:, 0]\n",
    "X = know_age.iloc[:, 1:]\n",
    "rf = RandomForestRegressor(random_state=0, n_estimators=100, n_jobs=-1)\n",
    "rf.fit(X, y)\n",
    "age_predicts = rf.predict(unknow_age.iloc[:, 1:])\n",
    "\n",
    "df.loc[df.Age.isnull(), 'Age'] = age_predicts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.FacetGrid at 0x1ca267a07b8>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 483.875x216 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "g = sns.FacetGrid(df[0:890], hue='Survived', aspect=2)\n",
    "g.map(sns.kdeplot, 'Age', shade=True)\n",
    "g.set(xlim=(0, df.loc[0:890, 'Age'].max()))\n",
    "g.add_legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 Fare\n",
    "The feature has 1 null values, So we use median value to fill up"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Name</th>\n",
       "      <th>Parch</th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Ticket_num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1043</th>\n",
       "      <td>60.5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Storey, Mr. Thomas</td>\n",
       "      <td>0</td>\n",
       "      <td>1044</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3701</td>\n",
       "      <td>3701.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Age Cabin Embarked  Fare                Name  Parch  PassengerId  \\\n",
       "1043  60.5   NaN        S   NaN  Storey, Mr. Thomas      0         1044   \n",
       "\n",
       "      Pclass   Sex  SibSp  Survived Ticket  Ticket_num  \n",
       "1043       3  male      0       NaN   3701      3701.0  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df['Fare'].isnull()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "fare = df.loc[(df['Embarked']=='S') & (df['Pclass']==3), 'Fare'].median()\n",
    "df['Fare'].fillna(fare, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.  Create new feature"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1 Title"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Capt',\n",
       " 'Col',\n",
       " 'Don',\n",
       " 'Dona',\n",
       " 'Dr',\n",
       " 'Jonkheer',\n",
       " 'Lady',\n",
       " 'Major',\n",
       " 'Master',\n",
       " 'Miss',\n",
       " 'Mlle',\n",
       " 'Mme',\n",
       " 'Mr',\n",
       " 'Mrs',\n",
       " 'Ms',\n",
       " 'Rev',\n",
       " 'Sir',\n",
       " 'the Countess'}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titles = set()\n",
    "for name in df['Name']:\n",
    "    titles.add(name.split(',')[1].split('.')[0].strip())\n",
    "titles"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Make a dictionary for mapping the titles into three kinds\n",
    "Title_Dictionary = {\n",
    "    \"Capt\": \"Officer\",\n",
    "    \"Col\": \"Officer\",\n",
    "    \"Major\": \"Officer\",\n",
    "    \"Jonkheer\": \"Master\",\n",
    "    \"Don\": \"Royalty\",\n",
    "    \"Sir\" : \"Royalty\",\n",
    "    \"Dr\": \"Officer\",\n",
    "    \"Rev\": \"Officer\",\n",
    "    \"the Countess\":\"Royalty\",\n",
    "    \"Mme\": \"Mrs\",\n",
    "    \"Mlle\": \"Miss\",\n",
    "    \"Ms\": \"Mrs\",\n",
    "    \"Mr\" : \"Mr\",\n",
    "    \"Mrs\" : \"Mrs\",\n",
    "    \"Miss\" : \"Miss\",\n",
    "    \"Master\" : \"Master\",\n",
    "    \"Lady\" : \"Royalty\",\n",
    "    \"Dona\" : \"Royalty\"    \n",
    "}\n",
    "\n",
    "df['Title'] = df['Name'].map(lambda name: name.split(',')[1].split('.')[0].strip())\n",
    "df['Title'] = df['Title'].map(Title_Dictionary)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Mr         757\n",
       "Miss       262\n",
       "Mrs        200\n",
       "Master      62\n",
       "Officer     23\n",
       "Royalty      5\n",
       "Name: Title, dtype: int64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Title'].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2 Surname"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Name</th>\n",
       "      <th>Parch</th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Ticket_num</th>\n",
       "      <th>Title</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>521171.0</td>\n",
       "      <td>Mr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>38.0</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>17599.0</td>\n",
       "      <td>Mrs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>26.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>female</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>23101282.0</td>\n",
       "      <td>Miss</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>35.0</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>113803</td>\n",
       "      <td>113803.0</td>\n",
       "      <td>Mrs</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>373450</td>\n",
       "      <td>373450.0</td>\n",
       "      <td>Mr</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Age Cabin Embarked     Fare  \\\n",
       "0  22.0   NaN        S   7.2500   \n",
       "1  38.0   C85        C  71.2833   \n",
       "2  26.0   NaN        S   7.9250   \n",
       "3  35.0  C123        S  53.1000   \n",
       "4  35.0   NaN        S   8.0500   \n",
       "\n",
       "                                                Name  Parch  PassengerId  \\\n",
       "0                            Braund, Mr. Owen Harris      0            1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...      0            2   \n",
       "2                             Heikkinen, Miss. Laina      0            3   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)      0            4   \n",
       "4                           Allen, Mr. William Henry      0            5   \n",
       "\n",
       "   Pclass     Sex  SibSp  Survived            Ticket  Ticket_num Title  \n",
       "0       3    male      1       0.0         A/5 21171    521171.0    Mr  \n",
       "1       1  female      1       1.0          PC 17599     17599.0   Mrs  \n",
       "2       3  female      0       1.0  STON/O2. 3101282  23101282.0  Miss  \n",
       "3       1  female      1       1.0            113803    113803.0   Mrs  \n",
       "4       3    male      0       0.0            373450    373450.0    Mr  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# df['Surname'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1ca27fe0438>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df['Surname'] = df['Name'].map(lambda name: name.split(',')[0].strip())\n",
    "df['FamilyGroup'] = df['Surname'].map(df['Surname'].value_counts())\n",
    "\n",
    "sns.barplot(x='FamilyGroup', y='Survived', data=df, palette='Set3')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'Danbom', 'Palsson', 'Rosblom', 'Sage', 'Lahtinen', 'Bourke', 'Skoog', 'Goodwin', 'Boulos', 'Johnston', 'Arnold-Franchi', 'Olsson', 'Van Impe', 'Jussila', 'Cacic', 'Ford', 'Zabour', 'Ilmakangas', 'Rice', 'Vander Planke', 'Barbara', 'Oreskovic', 'Turpin', 'Attalah', 'Caram', 'Elias', 'Canavan', 'Lobb', 'Panula', 'Strom', 'Robins', 'Lefebre'}\n",
      "{'Chambers', 'Bishop', 'Frauenthal', 'Taylor', 'Jussila', 'Cardeza', 'Bradley', 'Frolicher-Stehli', 'Beckwith', 'Greenfield', 'Harder', 'Moubarek', 'Nakid', 'Beane', 'Goldenberg', 'Kimball', 'Daly', 'Duff Gordon', 'McCoy', 'Jonsson', 'Dick'}\n"
     ]
    }
   ],
   "source": [
    "Female_Child_Group = df.loc[(df['FamilyGroup']>=2) & ((df['Age']<=16) | (df['Sex']=='female'))]\n",
    "Female_Child_Group = Female_Child_Group.groupby('Surname')['Survived'].mean()\n",
    "Dead_List = set(Female_Child_Group[Female_Child_Group.apply(lambda x:x==0)].index)\n",
    "print(Dead_List)\n",
    "\n",
    "Male_Adult_Group = df.loc[(df['FamilyGroup']>=2) & (df['Age']>16) & (df['Sex']=='male')]\n",
    "Male_Adult_List = Male_Adult_Group.groupby('Surname')['Survived'].mean()\n",
    "Survived_List = set(Male_Adult_List[Male_Adult_List.apply(lambda x:x==1)].index)\n",
    "print(Survived_List)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
